package com.lw.syn;

/**
 * @author LW
 * @2020/8/18 14:07
 */
public class sycBank {


    public static void main(String[] args) {
        SycAccount account = new SycAccount(1000,"余额");
        sycDrawing you = new sycDrawing(account,50,"你");
        sycDrawing other = new sycDrawing(account,100,"别人");
        you.start();
        other.start();
    }

}

class SycAccount{
    int money;
    String name;

    public SycAccount(int money, String name) {
        this.money = money;
        this.name = name;
    }
}

class sycDrawing extends Thread{
    SycAccount account;//账号
    int drawingMoney;//取了多少钱
    int nowMoney;//现在手里有多少钱
    public sycDrawing(SycAccount account,int drawingMoney, String name) {
        super(name);
        this.account=account;
        this.drawingMoney=drawingMoney;

    }

    @Override
    public void run() {
        synchronized (account) {//同步代码块    可以锁任何对象（不一定是类）
            //锁的是变化的量
            //所以在这里锁的是变化的账户   （须要增、删、改的对象）   查不需要同步。大家都能看
            // 而不是银行

            //判断有没有钱
            if (account.money - drawingMoney < 0) {
                System.out.println(Thread.currentThread().getName() + "********钱不够，取不了");
                return;
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //卡内余额
            account.money = account.money - drawingMoney;
            //手里的钱
            nowMoney = nowMoney + drawingMoney;

            System.out.println(account.name + "余额为：" + account.money);
            //Thread.currentThread().getName()==this.getName()
            System.out.println(this.getName() + "手里的钱：" + nowMoney);
        }
    }
}
